# 函数的嵌套
# 返回值中有函数
# 为了增强某一函数的功能,并不改变原函数
# 但是让原函数拥有额外的功能
# 调用的方式不能改变

# 装饰器的语法:
#       1 函数的嵌套,外层函数的参数是函数f
#       2 内层函数返回函数f的调用
#       3 外层函数返回内层函数
#       4 额外的功能加在内层函数中
#       5 内层函数 参数 和 返回值 都与  原函数 一致
def outer(f):
    def inner():
        print('额外的功能')
        return f()
    return inner

#  1
# @outer
# def nihao():
#     print('你好')
# nihao()
#  2
# outer(nihao)()
#  @ outer  ==  outer(函数)()

#   任意写一个装饰器decorate,来装饰一个函数fun1
def decorate(f):
    def inner():
        print('Action')
        return f()
    return inner
@decorate
def nihao():
    print('你好')
nihao()

